package cn.liontalk.ProxyPattern.pattern3;

/**
 * 「定义真实对象和代理对象的公共接口」（售卖香水接口）
 * 「代理对象内部保存对真实目标对象的引用」（小红引用提供商）
 * 代理对象并不是真正提供服务的一个对象，它只是替访问者访问目标对象的一个「中间人」，
 * 真正提供服务的还是目标对象，而代理对象的作用就是在目标对象提供服务之前和之后能够执行额外的逻辑。
 *
 * 代理模式的定义：「给目标对象提供一个代理对象，
 * 代理对象包含该目标对象，并控制对该目标对象的访问。」
 *
 * 代理模式的目的：
 * 通过代理对象的隔离，可以在对目标对象访问前后「增加额外的业务逻辑，实现功能增强。」
 * 通过代理对象访问目标对象，可以「防止系统大量地直接对目标对象进行不正确地访问」，出现不可预测的后果
 */
public class XiaoMing {

    public static void main(String[] args) {
        ChanelFactory chanelFactory = new ChanelFactory();
        XiaoHongSellProxy sellProxy = new XiaoHongSellProxy(chanelFactory);
        sellProxy.sellPerfume(1999.8);
    }
}
